package com.tfjybj.itoo.exam.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.exam.entity.ExamRoomEntity;
import com.tfjybj.itoo.exam.model.ExamExamRoomListModel;
import com.tfjybj.itoo.exam.model.ExamRoomModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * ExamRoomDao接口
 * examRoom表
 *
 * @author 任晓帅
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 19:40:28
 */
@Repository("examRoomDao")
public interface ExamRoomDao extends BaseMapper<ExamRoomEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据考场名称模糊查询examRoom
     *
     * @param name 考场名称
     * @return 模糊查询的examRoom集合
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    List<ExamRoomEntity> queryLikeName(@Param("name") String name);


    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

//    /**
//     * 查询考场详情
//     *
//     * @param examinationModels ExaminationModel
//     * @return examRoomModels
//     * @author 王雪芬
//     * @since 2.0.0        2018-11-19 12:10:51
//     */
////    TODO 待删除
//    List<ExamRoomModel> queryExaminRoot(@Param("examinationModels") ExaminationModel examinationModels);

    /**
     * @param examId String
     * @return 删除条数
     * @author maying
     * @since 2018年11月18日10:19:20
     */
    int delExamroomArray(@Param("examId") String examId);

    /**
     * @param examId
     * @return 考场List
     * @author maying
     * @since 2018年11月18日16:00:38
     * 根据考试id查询考场
     */
    List<ExamRoomEntity> selAddExaminee(@Param("examId") String examId);


    /**
     * 根据操作人和查询正在进行的考试
     *
     * @param operator String
     * @return 考场信息
     * @author 王雪芬
     * @since 2018年11月22日10:19:20
     */
    List<ExamRoomModel> queryExamRoom(@Param("operator") String operator);

    /**
     * 查询已安排有剩余容量的考场
     *
     * @param fuzzyValue 考场名称（模糊查询的值）
     * @param schoolKey  校区代号
     * @param startTime  开始考试时间
     * @param endTime    考试结束时间
     * @return 考场集合
     * @author maying
     * @since 2018-12-20 16:01:55
     */
    List<ExamRoomModel> selectSurplusRoom(@Param("fuzzyValue") String fuzzyValue, @Param("schoolKey") String schoolKey, @Param("startTime") String startTime, @Param("endTime") String endTime);


    /**
     * 点击考场选择按钮,判断此考场是否选择过
     *
     * @param roomId     教室id
     * @param schoolCode 校区代号
     * @param startTime  考试开始时间
     * @return 考场集合
     * @author 马莹
     * @since 2018-12-21 12:00:17
     */
    List<ExamRoomModel> selectExamRoom(@Param("roomId") String roomId, @Param("schoolCode") String schoolCode, @Param("startTime") String startTime);

    /**
     * 根据考试id查询所有监考老师,对应考场
     *
     * @param examId      考试id
     * @param teacherName 模糊参数
     * @return
     * @author 马莹
     * @since 2018-12-23 09:43:39
     */
    List<ExamRoomModel> findTeacher(@Param("examId") String examId, @Param("teacherName") String teacherName);


    /**
     * 根据考试id 更新开始时间和理论交卷时间
     *
     * @param examId    考试id
     * @param startTime 考试时间
     * @param endTime   理论交卷时间
     * @author 马莹
     * @since 2018-12-24 20:36:36
     */
    boolean updateExamRoomInfomation(@Param("examId") String examId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据考试id筛选考场使用情况
     *
     * @param examId 考试id
     * @return List<ExamRoomModel>
     * @author 马莹
     * @since 2018-12-26 15:18:37
     */
    List<ExamRoomModel> selectExamRoomIng(@Param("examId") String examId);

    ExamRoomModel queryExamRootTime(@Param("examRoomId") String examRoomId);

    /**
     * 根据考试id查询考场
     *
     * @param examId
     * @return
     * @author 于云秀
     * @since 2019年1月5日
     */
    List<ExamRoomModel> selectExamRoomList(@Param("examId") String examId, @Param("operator") String operator);

    /**
     * 根据考试id查询考场和考试信息
     *
     * @param examIdList 考试id集合
     * @return 考试和考场信息集合
     * @author 马莹
     * @since 2019-1-7 09:43:31
     */
    List<ExamExamRoomListModel> selectExamAndExamRoomInfomation(@Param("examIdList") List<String> examIdList);

    /**
     * 根据考试的开始和结束时间查询符合条件的考场
     *
     * @param startTime 考试开始时间
     * @param endTime   考试结束时间
     * @return 正在使用的考场集合
     * @author 马莹
     * @since 2019-5-5 16:18:38
     */
    List<ExamRoomModel> queryMeetConditionExamRoom(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据考试的开始时间和结束时间查询监考老师
     *
     * @param startTime 考试开始时间
     * @param endTime   考试结束时间
     * @return 已经配置的监考老师id集合
     * @author 马莹
     * @since 2019-5-7 10:15:00
     */
    List<String> queryTeacherIdList(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
}
